﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Studio7i.Negocio;
using Studio7i.Dominio;

namespace Studio7i.Controllers
{
    public class ReservaController : Controller
    {

        #region Dependencias
        IReservaService ReservaService{ get; set; }
        #endregion
        //
        // GET: /Reserva/

        public ActionResult Index()
        {
             ICollection<Reserva> modelo = ReservaService.ListarReservas();
            return View(modelo);
        }

        //
        // GET: /Reserva/Details/5

        public ActionResult Buscar(int codigo)
        {
           Reserva modelo = ReservaService.ObtenerReserva(codigo);
            return View(modelo);
        }

        //
        // GET: /Reserva/Create

        public ActionResult Creacion()
        {
          
            return View();
        } 

        //
        // POST: /Reserva/Create

        [HttpPost]
        public ActionResult Crear(FormCollection collection)
        {
            // Capturamos los datos del formulario enviado desde Creacion.aspx
            Reserva reservaACrear = new Reserva();
            reservaACrear.CodReserva = Convert.ToInt32(collection["CodReserva"]);
            reservaACrear.Hora = Convert.ToInt32(collection["Hora"]);
            reservaACrear.Tiempo = Convert.ToInt32(collection["Tiempo"]);
            reservaACrear.Costo = Convert.ToInt32(collection["Costo"]);
            reservaACrear.Cliente.CodUser = 1;
            reservaACrear.Sala.CodSala = 1;
            reservaACrear.Local.CodLocal = 1;
            reservaACrear.Estado = Convert.ToInt32(collection["Estado"]);
            reservaACrear.FechReser = DateTime.ParseExact((collection["FechReser"]), "dd-MM-yyyy", null);

            // Coordinamos con el negocio para la funcionalidad
            try
            {
                Reserva reservaCreado = ReservaService.CrearReserva(reservaACrear);
                TempData["mensaje"] = "Reserva " + reservaCreado.CodReserva+ " creado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista

            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Creacion",reservaACrear);
            }
        }
        
        //
        // GET: /Reserva/Edit/5
 
        public ActionResult Ver(int codigo)
        {
            return View(ReservaService.ObtenerReserva(codigo));

        }

        public ActionResult Editar(int Codigo) 
        {
            return View(ReservaService.ObtenerReserva(Codigo));
        }
        //
        // POST: /Reserva/Edit/5

        [HttpPost]
        public ActionResult Modificar(int id, FormCollection collection)
        {
            Reserva reservaAModificar = new Reserva();
            
            reservaAModificar.CodReserva = Convert.ToInt32(collection["CodReserva"]);
            reservaAModificar.FechReser = DateTime.ParseExact((collection["FechReser"]), "dd-MM-yyyy", null);
            reservaAModificar.Hora = Convert.ToInt32(collection["Hora"]);
            reservaAModificar.Tiempo = Convert.ToInt32(collection["Tiempo"]);
            reservaAModificar.Costo = Convert.ToInt32(collection["Costo"]);
            reservaAModificar.Cliente.CodUser = 1;
            reservaAModificar.Sala.CodSala = 1;
            reservaAModificar.Local.CodLocal = 1;
            reservaAModificar.Estado = Convert.ToInt32(collection["Estado"]);

            try
            {
                Reserva reservaModificada = ReservaService.ModificarReserva(reservaAModificar);
                TempData["mensaje"] = "Reserva " + reservaModificada.CodReserva + " modificado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch (Exception ex)
            {

                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Creacion", reservaAModificar); // Problemas! De nuevo a Modificacion.aspx
            }
        }

        //
        // GET: /Reserva/Delete/5
        //
        // POST: /Reserva/Delete/5

        
        public ActionResult Eliminacion(int codigo)
        {
            return View(ReservaService.ObtenerReserva(codigo));           
        }

        [HttpPost]
        public ActionResult Eliminar(int id, FormCollection collection)
        {

            try
            {
                Reserva reservaAEliminar = ReservaService.ObtenerReserva(id);
                ReservaService.EliminarReserva(reservaAEliminar);
                TempData["mensaje"] = "Reserva " + reservaAEliminar.CodReserva + " eliminado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch (Exception ex)
            {

                ModelState.AddModelError(string.Empty, ex.Message); // Agregamos el error a mostrarse
                return View("Eliminacion", ReservaService.ObtenerReserva(id)); // Problemas! De nuevo a Eliminacion.aspx
            }
        }

        
    }
}
